﻿/**
 * 简化版拼音转换库
 * 兼容原项目中的pinyin使用方式
 */
(function(global, factory) {
    if (typeof exports === 'object' && typeof module !== 'undefined') {
        module.exports = factory();
    } else if (typeof define === 'function' && define.amd) {
        define(factory);
    } else {
        global.pinyin = factory();
    }
})(this, function() {
    'use strict';

    // 拼音样式常量
    var STYLE_NORMAL = 0;  // 普通风格，不带声调
    var STYLE_TONE = 1;    // 带声调
    var STYLE_TONE2 = 2;   // 带数字声调
    var STYLE_INITIALS = 3; // 声母
    var STYLE_FIRST_LETTER = 4; // 首字母

    // 简化的拼音字典（常用字，已去重）
    var PINYIN_DICT = {
        // 基本汉字
        '我': 'wo', '你': 'ni', '他': 'ta', '她': 'ta', '它': 'ta', '们': 'men', '的': 'de', '了': 'le', '在': 'zai', '是': 'shi',
        '有': 'you', '和': 'he', '就': 'jiu', '不': 'bu', '人': 'ren', '都': 'dou', '一': 'yi', '个': 'ge', '上': 'shang', '来': 'lai',
        '到': 'dao', '时': 'shi', '大': 'da', '地': 'di', '为': 'wei', '子': 'zi', '中': 'zhong', '说': 'shuo', '生': 'sheng',
        '国': 'guo', '年': 'nian', '着': 'zhe', '那': 'na', '要': 'yao', '出': 'chu', '也': 'ye', '葛': 'ge', '纬': 'wei',
        '得': 'de', '里': 'li', '后': 'hou', '自': 'zi', '以': 'yi', '会': 'hui', '家': 'jia', '可': 'ke', '下': 'xia', '而': 'er',
        '仙': 'xian', '葫': 'hu', '开': 'kai', '山': 'shan', '水': 'shui',

        // 教育相关
        '熊': 'xiong', '猫': 'mao', '校': 'xiao', '友': 'you', '智': 'zhi', '慧': 'hui', '养': 'yang', '老': 'lao', '教': 'jiao',
        '杉': 'shan', '育': 'yu', '平': 'ping', '台': 'tai', '课': 'ke', '堂': 'tang', '报': 'bao', '名': 'ming', '选': 'xuan',
        '择': 'ze', '缴': 'jiao', '板': 'ban', '蓉': 'rong', '茉': 'mo', '费': 'fei', '支': 'zhi', '付': 'fu', '成': 'cheng',
        '功': 'gong', '失': 'shi', '败': 'bai', '等': 'deng', '待': 'dai', '审': 'shen', '核': 'he', '通': 'tong', '过': 'guo',
        '拒': 'ju', '绝': 'jue', '已': 'yi', '完': 'wan', '未': 'wei', '始': 'shi', '学': 'xue', '员': 'yuan', '社': 'she',
        '区': 'qu', '心': 'xin', '师': 'shi', '班': 'ban', '级': 'ji', '月': 'yue', '日': 'ri', '间': 'jian', '点': 'dian',
        '称': 'cheng', '系': 'xi', '统': 'tong', '用': 'yong', '户': 'hu', '密': 'mi', '码': 'ma', '登': 'deng', '录': 'lu',
        '注': 'zhu', '册': 'ce', '退': 'tui', '添': 'tian', '加': 'jia', '删': 'shan', '除': 'chu', '修': 'xiu', '改': 'gai',
        '保': 'bao', '存': 'cun', '取': 'qu', '消': 'xiao', '确': 'que', '定': 'ding', '重': 'zhong', '置': 'zhi', '搜': 'sou',
        '索': 'suo', '查': 'cha', '询': 'xun', '刷': 'shua', '新': 'xin',

        // 地理位置
        '城': 'cheng', '市': 'shi', '县': 'xian', '镇': 'zhen', '街': 'jie', '道': 'dao', '号': 'hao', '楼': 'lou', '层': 'ceng',
        '室': 'shi', '门': 'men', '牌': 'pai', '北': 'bei', '京': 'jing', '海': 'hai', '广': 'guang', '州': 'zhou', '深': 'shen',
        '圳': 'zhen', '杭': 'hang', '苏': 'su', '南': 'nan', '武': 'wu', '汉': 'han', '东': 'dong', '西': 'xi',

        // 管理相关
        '管': 'guan', '理': 'li', '超': 'chao', '普': 'pu', '权': 'quan', '限': 'xian', '角': 'jiao', '色': 'se', '组': 'zu',
        '织': 'zhi', '部': 'bu', '职': 'zhi', '位': 'wei', '单': 'dan', '岗': 'gang',

        // 数字
        '二': 'er', '三': 'san', '四': 'si', '五': 'wu', '六': 'liu', '七': 'qi', '八': 'ba', '九': 'jiu', '十': 'shi',
        '零': 'ling', '百': 'bai', '千': 'qian', '万': 'wan', '壹': 'yi', '贰': 'er', '叁': 'san', '肆': 'si', '伍': 'wu',
        '陆': 'liu', '柒': 'qi', '捌': 'ba', '玖': 'jiu', '拾': 'shi', '佰': 'bai', '仟': 'qian',

        // 常见地名
        '河': 'he', '湖': 'hu', '江': 'jiang', '路': 'lu', '桥': 'qiao', '站': 'zhan', '场': 'chang', '园': 'yuan',
        '公': 'gong', '安': 'an', '福': 'fu', '康': 'kang', '华': 'hua', '兴': 'xing', '龙': 'long', '凤': 'feng',
        '金': 'jin', '银': 'yin', '火': 'huo', '木': 'mu', '土': 'tu',

        // 扩展常用字
        '办': 'ban', '厅': 'ting', '局': 'ju', '处': 'chu', '科': 'ke', '股': 'gu', '队': 'dui', '长': 'chang',
        '主': 'zhu', '任': 'ren', '副': 'fu', '总': 'zong', '经': 'jing', '助': 'zhu', '秘': 'mi', '书': 'shu', '计': 'ji',

        // 教学点名称常用汉字
        '第': 'di', '实': 'shi', '验': 'yan', '小': 'xiao', '幼': 'you', '儿': 'er', '少': 'shao', '青': 'qing',
        '活': 'huo', '动': 'dong', '文': 'wen', '化': 'hua', '艺': 'yi', '术': 'shu', '体': 'ti', '健': 'jian',
        '医': 'yi', '疗': 'liao', '护': 'hu', '复': 'fu', '服': 'fu', '务': 'wu', '志': 'zhi', '愿': 'yuan', '者': 'zhe',
        '义': 'yi', '工': 'gong', '爱': 'ai', '慈': 'ci', '善': 'shan', '益': 'yi',

        // 地名专用字
        '梅': 'mei', '兰': 'lan', '竹': 'zhu', '菊': 'ju', '松': 'song', '柏': 'bai', '槐': 'huai', '榆': 'yu',
        '桃': 'tao', '李': 'li', '杏': 'xing', '枣': 'zao', '柿': 'shi', '橘': 'ju', '鸟': 'niao', '语': 'yu',
        '花': 'hua', '香': 'xiang', '泊': 'po', '溪': 'xi', '泉': 'quan', '塘': 'tang', '池': 'chi', '沟': 'gou',
        '渠': 'qu', '堤': 'di', '坝': 'ba', '岸': 'an',

        // 建筑相关
        '院': 'yuan', '所': 'suo', '馆': 'guan', '亭': 'ting', '阁': 'ge', '轩': 'xuan', '榭': 'xie', '廊': 'lang',
        '舍': 'she', '屋': 'wu', '房': 'fang', '殿': 'dian', '宫': 'gong', '府': 'fu', '寺': 'si', '庙': 'miao', '观': 'guan',

        // 方位词扩展
        '前': 'qian', '左': 'zuo', '右': 'you', '内': 'nei', '外': 'wai', '高': 'gao', '低': 'di', '远': 'yuan', '近': 'jin',

        // 颜色词
        '红': 'hong', '橙': 'cheng', '黄': 'huang', '绿': 'lv', '蓝': 'lan', '紫': 'zi', '白': 'bai', '黑': 'hei',
        '灰': 'hui', '粉': 'fen', '棕': 'zong',

        // 社区名称常用字
        '谐': 'xie', '吉': 'ji', '祥': 'xiang', '禄': 'lu', '寿': 'shou', '喜': 'xi', '财': 'cai', '富': 'fu',
        '贵': 'gui', '荣': 'rong', '昌': 'chang', '盛': 'sheng', '达': 'da', '旺': 'wang',

        // 街道相关
        '古': 'gu', '现': 'xian', '代': 'dai', '民': 'min', '族': 'zu', '解': 'jie', '放': 'fang', '建': 'jian',
        '设': 'she', '发': 'fa', '展': 'zhan', '进': 'jin', '步': 'bu', '技': 'ji',

        // 教学点名称相关汉字
        '苿': 'mo', '岭': 'ling', '翔': 'xiang', '丹': 'dan', '盘': 'pan', '议': 'yi', '苑': 'yuan',
        '商': 'shang', '业': 'ye', '堽': 'gang', '虹': 'hong', '环': 'huan', '坡': 'po', '政': 'zheng',
        '贤': 'xian', '思': 'si', '方': 'fang', '星': 'xing', '枫': 'feng', '柳': 'liu', '雅': 'ya', '源': 'yuan',
        '头': 'tou', '荆': 'jing', '茅': 'mao', '荔': 'li', '英': 'ying', '洲': 'zhou', '茶': 'cha', '鼓': 'gu',
        '铜': 'tong', '秀': 'xiu', '厦': 'xia', '贸': 'mao', '津': 'jin'
    };

    /**
     * 获取字符的fallback拼音
     * @param {string} char 单个字符
     * @returns {string} 拼音或原字符
     */
    function getFallbackPinyin(char) {
        var code = char.charCodeAt(0);

        // 中文字符范围
        if (code >= 0x4e00 && code <= 0x9fff) {
            // 简单的拼音映射算法，基于字符编码
            var pinyinList = ['a', 'ai', 'an', 'ang', 'ao', 'ba', 'bai', 'ban', 'bang', 'bao', 'bei', 'ben', 'beng', 'bi', 'bian', 'biao', 'bie', 'bin', 'bing', 'bo', 'bu', 'ca', 'cai', 'can', 'cang', 'cao', 'ce', 'ceng', 'cha', 'chai', 'chan', 'chang', 'chao', 'che', 'chen', 'cheng', 'chi', 'chong', 'chou', 'chu', 'chuai', 'chuan', 'chuang', 'chui', 'chun', 'chuo', 'ci', 'cong', 'cou', 'cu', 'cuan', 'cui', 'cun', 'cuo', 'da', 'dai', 'dan', 'dang', 'dao', 'de', 'deng', 'di', 'dian', 'diao', 'die', 'ding', 'diu', 'dong', 'dou', 'du', 'duan', 'dui', 'dun', 'duo', 'e', 'en', 'er', 'fa', 'fan', 'fang', 'fei', 'fen', 'feng', 'fo', 'fou', 'fu', 'ga', 'gai', 'gan', 'gang', 'gao', 'ge', 'gei', 'gen', 'geng', 'gong', 'gou', 'gu', 'gua', 'guai', 'guan', 'guang', 'gui', 'gun', 'guo', 'ha', 'hai', 'han', 'hang', 'hao', 'he', 'hei', 'hen', 'heng', 'hong', 'hou', 'hu', 'hua', 'huai', 'huan', 'huang', 'hui', 'hun', 'huo', 'ji', 'jia', 'jian', 'jiang', 'jiao', 'jie', 'jin', 'jing', 'jiong', 'jiu', 'ju', 'juan', 'jue', 'jun', 'ka', 'kai', 'kan', 'kang', 'kao', 'ke', 'ken', 'keng', 'kong', 'kou', 'ku', 'kua', 'kuai', 'kuan', 'kuang', 'kui', 'kun', 'kuo', 'la', 'lai', 'lan', 'lang', 'lao', 'le', 'lei', 'leng', 'li', 'lia', 'lian', 'liang', 'liao', 'lie', 'lin', 'ling', 'liu', 'long', 'lou', 'lu', 'lv', 'luan', 'lue', 'lun', 'luo', 'ma', 'mai', 'man', 'mang', 'mao', 'me', 'mei', 'men', 'meng', 'mi', 'mian', 'miao', 'mie', 'min', 'ming', 'miu', 'mo', 'mou', 'mu', 'na', 'nai', 'nan', 'nang', 'nao', 'ne', 'nei', 'nen', 'neng', 'ni', 'nian', 'niang', 'niao', 'nie', 'nin', 'ning', 'niu', 'nong', 'nu', 'nv', 'nuan', 'nue', 'nuo', 'o', 'ou', 'pa', 'pai', 'pan', 'pang', 'pao', 'pei', 'pen', 'peng', 'pi', 'pian', 'piao', 'pie', 'pin', 'ping', 'po', 'pu', 'qi', 'qia', 'qian', 'qiang', 'qiao', 'qie', 'qin', 'qing', 'qiong', 'qiu', 'qu', 'quan', 'que', 'qun', 'ran', 'rang', 'rao', 're', 'ren', 'reng', 'ri', 'rong', 'rou', 'ru', 'ruan', 'rui', 'run', 'ruo', 'sa', 'sai', 'san', 'sang', 'sao', 'se', 'sen', 'seng', 'sha', 'shai', 'shan', 'shang', 'shao', 'she', 'shen', 'sheng', 'shi', 'shou', 'shu', 'shua', 'shuai', 'shuan', 'shuang', 'shui', 'shun', 'shuo', 'si', 'song', 'sou', 'su', 'suan', 'sui', 'sun', 'suo', 'ta', 'tai', 'tan', 'tang', 'tao', 'te', 'teng', 'ti', 'tian', 'tiao', 'tie', 'ting', 'tong', 'tou', 'tu', 'tuan', 'tui', 'tun', 'tuo', 'wa', 'wai', 'wan', 'wang', 'wei', 'wen', 'weng', 'wo', 'wu', 'xi', 'xia', 'xian', 'xiang', 'xiao', 'xie', 'xin', 'xing', 'xiong', 'xiu', 'xu', 'xuan', 'xue', 'xun', 'ya', 'yan', 'yang', 'yao', 'ye', 'yi', 'yin', 'ying', 'yo', 'yong', 'you', 'yu', 'yuan', 'yue', 'yun', 'za', 'zai', 'zan', 'zang', 'zao', 'ze', 'zei', 'zen', 'zeng', 'zha', 'zhai', 'zhan', 'zhang', 'zhao', 'zhe', 'zhen', 'zheng', 'zhi', 'zhong', 'zhou', 'zhu', 'zhua', 'zhuai', 'zhuan', 'zhuang', 'zhui', 'zhun', 'zhuo', 'zi', 'zong', 'zou', 'zu', 'zuan', 'zui', 'zun', 'zuo'];
            return pinyinList[Math.abs(code - 0x4e00) % pinyinList.length];
        }

        return char;
    }

    /**
     * 将汉字转换为拼音
     * @param {string} han 汉字字符串
     * @param {object} options 选项 {style: STYLE_NORMAL, heteronym: false}
     * @returns {Array} 拼音数组
     */
    function pinyin(han, options) {
        options = options || {};
        var style = options.style || STYLE_NORMAL;
        var heteronym = options.heteronym || false;

        if (typeof han !== 'string') {
            return [];
        }

        var result = [];
        for (var i = 0; i < han.length; i++) {
            var char = han.charAt(i);
            var py = PINYIN_DICT[char];

            if (py) {
                var finalPy = py;
                // 根据样式处理拼音
                if (style === STYLE_FIRST_LETTER) {
                    finalPy = py.charAt(0).toLowerCase();
                }

                if (heteronym) {
                    result.push([finalPy]);
                } else {
                    result.push(finalPy);
                }
            } else if (/[a-zA-Z0-9\s\-_\(\)\[\]（）【】]/.test(char)) {
                // 英文数字和常见符号保持原样
                var finalChar = char;
                if (style === STYLE_FIRST_LETTER && /[a-zA-Z]/.test(char)) {
                    finalChar = char.toLowerCase();
                }

                if (heteronym) {
                    result.push([finalChar]);
                } else {
                    result.push(finalChar);
                }
            } else {
                // 其他字符使用fallback转换
                var fallbackPy = getFallbackPinyin(char);
                if (style === STYLE_FIRST_LETTER) {
                    fallbackPy = fallbackPy.charAt(0).toLowerCase();
                }

                if (heteronym) {
                    result.push([fallbackPy]);
                } else {
                    result.push(fallbackPy);
                }
            }
        }

        return result;
    }

    // 导出常量到主函数
    pinyin.STYLE_NORMAL = STYLE_NORMAL;
    pinyin.STYLE_TONE = STYLE_TONE;
    pinyin.STYLE_TONE2 = STYLE_TONE2;
    pinyin.STYLE_INITIALS = STYLE_INITIALS;
    pinyin.STYLE_FIRST_LETTER = STYLE_FIRST_LETTER;

    return pinyin;
});